<?php
header("Content-type:text/html;charset=utf8");
// class myClass{
//     const constant="定义常量使用的是 'const'";
//     function showConstant(){
//         echo self::constant.PHP_EOL;
//     }
// }

// echo myClass::constant.PHP_EOL;//这个是直接写出实例

// $className = "myClass";//这个是将类赋值一个变量
// echo $className::constant.PHP_EOL;//自PHP5.30起

// $class =new myClass();//将类实例化
// $class->showConstant();

// echo $class::constant .PHP_EOL;//自PHP5.30起



// 抽象类实例
// abstract class AbstractClass
// {
//     // 强制要求子类定义这些方法
//     abstract protected function getValue();
//     abstract protected function prefixValue($prefix);

//     // 普通方法(非抽象方法)
//     public function printOut(){
//         print $this->getValue().PHP_EOL;
//     }
// }
// class ConcreteClass1 extends AbstractClass{
//    protected function getValue(){
//        return "ConcreteClass1";
//    }

//    public function prefixValue($prefix){
//        return "{$prefix}ConcreteClass1";
//    }
// }

// class ConcreteClass2 extends AbstractClass{
//     public function getValue(){
//         return "ConcreteClass2";
//     }
//     public function prefixValue($prefix){
//     return "{$prefix}ConcreteClass2";
//     }
// }

// $class1=new ConcreteClass1;
// $class1->printOut();
// echo $class1->prefixValue('FOO_').PHP_EOL;

// $class2=new ConcreteClass2;
// $class2->printOut();
// echo $class2->prefixValue('FOO_').PHP_EOL;

// static关键字
// class Foo{
//     public static $my_static = 'foo';
//     public function staticValue(){
//         return self::$my_static;
//     }
// }
// print Foo::$my_static.PHP_EOL;
// $foo=new FOO();
// print $foo->staticValue().PHP_EOL;

// Final 关键字
// class BaseClass{
//     public function test(){
//         echo "BaseClass::test() called".PHP_EOL;
//     }
//     final public function moreTesting(){
//         echo "BaseClass::morTesting() called".PHP_EOL;
//     }
// }
// class ChildClass extends BaseClass {
//     public function moreTesting() {
//         echo "ChildClass::moreTesting() called"  . PHP_EOL;
//     }
//  }
// 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
 
//class BaseClass{
//    function __construct(){
//        print "BaseClass类中构造方法".PHP_EOL;
//    }
//}
//class SubClass extends BaseClass{
//    function __construct(){
//        parent::__construct();//子类构造方法不能自动调用父类的构造方法
//        print "SubClass类中的构造方法".PHP_EOL;
//    }
//}
//class OtherSubClass extends BaseClass{
//    //继承BaseClass的构造方法
//}
//// 调用BaseClass 构造方法
//$obj=new BaseClass();
//
//// 调用BaseClass,SubClass构造方法
//$obj=new SubClass();
//
//// 调用BaseClass构造方法
//$obj = new OtherSubClass();
